/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:  AUDIO模块内部头文件
  Function List:
            
*******************************************************************************/
              
#ifndef AAC_PRIV_H
#define AAC_PRIV_H

/*=============================================================================
                                 Includes                                  
==============================================================================*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <time.h>

#include "faac.h"
#include "faad.h"

#include "log.h"
#include "sysIf.h"

/*=============================================================================
                               Macro Definition
==============================================================================*/


/*=============================================================================
                        Local Structures and Typedef 
==============================================================================*/

/* ring buffer缓存块结构体 */
typedef struct
{
    unsigned int    bufAddr;    /* 缓存块首地址 */
    unsigned int    bufSize;    /* 缓存块长度 */
} RINGBUF_block_t;

/*=============================================================================
                             extern  Variables                                  
==============================================================================*/

/*=============================================================================
                             Function Definition                                  
==============================================================================*/ 
/*******************************************************************************
  Function:     AUDIO_RingbufInit
  Description:  ring buffer初始化
  Input:        - pInitParam: ring buffer初始化参数
  Output:       无
  Return:       !NULL: ring buffer句柄
                NULL: 操作失败
  Others:       无
*******************************************************************************/
void *AUDIO_RingbufInit(int maxsize);

/*******************************************************************************
  Function:     AUDIO_RingbufDeInit
  Description:  注销ring buffer
  Input:        - hRingBuf: ring buffer句柄
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int AUDIO_RingbufDeInit(void *hRingBuf);

/*******************************************************************************
  Function:     AUDIO_RingbufGet
  Description:  获取ring buffer缓存
  Input:        - hRingBuf: ring buffer句柄
                - size: 申请的缓存长度
  Output:       - pBlockBuf: ring buffer缓存
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int AUDIO_RingbufGet(void *hRingBuf, 
                unsigned int size,
                RINGBUF_block_t *pBlockBuf);

/*******************************************************************************
  Function:     AUDIO_RingbufPut
  Description:  释放ring buffer缓存
  Input:        - hRingBuf: ring buffer句柄
                - pBlockBuf: ring buffer缓存
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int AUDIO_RingbufPut(void *hRingBuf, RINGBUF_block_t *pBlockBuf);

/*******************************************************************************
  Function:     AUDIO_RingbufFlush
  Description:  清空ring buffer缓存
  Input:        无
  Output:       无
  Return:       0: 操作成功
                -1: 操作失败
  Others:       无
*******************************************************************************/
int AUDIO_RingbufFlush(void *hRingBuf);

/*******************************************************************************
    Function:     AUDIO_QueueCreate
    Description:  创建队列
    Input:        - maxsize: 队列缓存元素个数
                  - dataSize: 单元数据长度
    Output:       无
    Return:       !NULL: 操作成功
                  NULL: 操作失败
    Others:       无
*******************************************************************************/
void *AUDIO_QueueCreate(int maxsize, int dataSize) ;

/*******************************************************************************
    Function:     AUDIO_QueueDestroy
    Description:  销毁队列
    Input:        - hQueue: 队列句柄
    Output:       无
    Return:       0: 操作成功
                  -1: 操作失败
    Others:       无
*******************************************************************************/
int AUDIO_QueueDestroy(void *hQueue);

/*******************************************************************************
    Function:     AUDIO_QueueWriteData
    Description:  向队列写入数据
    Input:        - hQueue: 队列句柄
                  - pData: 流媒体结构体指针
    Output:       无
    Return:       0: 操作成功
                  -1: 操作失败
    Others:       无
*******************************************************************************/
int AUDIO_QueueWriteData(void *hQueue, void *pData);

/*******************************************************************************
    Function:     AUDIO_QueueReadData
    Description:  从队列读出数据
    Input:        - hQueue: 队列句柄
                  - pData: 流媒体结构体指针
    Output:       无
    Return:       0: 操作成功
                  -1: 操作失败
    Others:       无
*******************************************************************************/
int AUDIO_QueueReadData(void *hQueue, void *pData);

/*******************************************************************************
    Function:     AUDIO_QueueState
    Description:  查询队列状态
    Input:        - hQueue: 队列句柄
    Output:       无
    Return:       0 : 正常
                  -1: 队列已满
                  1 : 队列为空
    Others:       无
*******************************************************************************/
int AUDIO_QueueState(void *hQueue);

#endif  /*AAC_PRIV_H*/

